home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / a_utils / perl / prlbkxmp.lha / ch6 / fixscripts < prev    next >
Text File  |  1991-01-08  |  1KB  |  69 lines

  1. #!/usr/bin/perl
  2.  
  3. die "Usage: fixscripts [files]\n" unless @ARGV;
  4.  
  5. # Configuration parameters.
  6.  
  7. $BIN = '/usr/local/bin';
  8. $SCRIPTS = '/u/scripts';
  9. $BAK = 'bak';
  10.  
  11. # Process each file.
  12.  
  13. foreach $file (@ARGV) {
  14.     unless (-T $file) {
  15.     warn "Can't process binary file: $file\n";
  16.     next;
  17.     }
  18.     open(FILE, $file)
  19.     || do { warn "Can't open $file: $!\n"; next; };
  20.  
  21.     # Now process the file.
  22.  
  23.     $contents = '';
  24.     $changed = 0;
  25.     while (<FILE>) {
  26.     if (m#$BIN#o) {
  27.         print STDERR "<$file:\t",$_;
  28.         $changed++;
  29.  
  30.         if (m#:/#o) {                       # a $path
  31.         s#$BIN#$BIN:$SCRIPTS#o;
  32.         }
  33.         elsif (m# /usr# && /set\s/) {       # a $PATH
  34.         s#$BIN([^/])#$BIN $SCRIPTS$1#o;
  35.         }
  36.         else {
  37.  
  38.         # Try substitutions until one works.
  39.  
  40.             s#$BIN/(\w+)#
  41.               -f "$SCRIPTS/$1" ?
  42.               "$SCRIPTS/$1" :
  43.               "$BIN/$1"#oeg             # a program
  44.         ||
  45.             s# $BIN# $BIN $SCRIPTS#o    # $PATH?
  46.         ||
  47.             s#$BIN #$BIN $SCRIPTS #o    # $PATH?
  48.         ||
  49.             s#:$BIN#:$BIN:$SCRIPTS#o    # $path?
  50.         ||
  51.             s#$BIN:#$BIN:$SCRIPTS:#o    # $path?
  52.         ;
  53.         }
  54.         print STDERR ">$file:\t",$_;
  55.     }
  56.     $contents .= $_;
  57.     }
  58.     close FILE;
  59.  
  60.     if ($changed) {
  61.     rename($file,"$file.$BAK") ||
  62.           do { warn "Can't rename $file: $!\n"; next; };
  63.     open(FILE, ">$file") ||
  64.           do { warn "Can't make $file: $!\n"; next; };
  65.     print FILE $contents;
  66.     close FILE;
  67.     }
  68. }
  69.